import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
import router, { routes, routeErrorHandler } from './router'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import './assets/css/index.scss'
// import { t, setLanguage, initI18next } from '@/plugins/i18nPlugin'
import { t, setLanguage, getCurrentLanguage } from '@/plugins/simpleI18n'
import { whiteScreenDetector } from '@/utils/whiteScreenDetector.js'
import { isMobile } from '@/utils/currency'
import { addResizeListener } from '@/utils/resizeListener'
import '@yeying-community/yeying-wallet/dist/yeying-wallet.css'
import { sdkRoutes, createWallet } from '@yeying-community/yeying-wallet'
import { initializeProviders } from '@/plugins/account'
import { useAuthStore } from '@/stores/auth'

// 设置默认语言为中文
const initializeLanguage = () => {
  // 获取保存的语言设置
  const savedLanguage = localStorage.getItem('i18nextLng')

  // 如果没有语言设置，或者语言设置不正确，设置为中文
  if (!savedLanguage) {
    console.log('未找到语言设置，设置为默认中文')
    setLanguage('zh-CN')
  } else {
    console.log('找到语言设置:', savedLanguage)
    // 重新设置语言以确保正确的映射和初始化
    setLanguage(savedLanguage)
  }
}

// 初始化主题设置
const initializeTheme = () => {
  // 从localStorage获取保存的主题模式
  const savedTheme = localStorage.getItem('vueuse-color-scheme') || 'light'

  // 设置HTML根元素的属性
  document.documentElement.setAttribute('data-theme', savedTheme)

  if (savedTheme === 'dark') {
    document.documentElement.classList.add('dark')
  } else {
    document.documentElement.classList.remove('dark')
  }
}

const app = createApp(App)

// 添加 SDK 路由到现有路由器
router.addRoute({
  path: '/sdk',
  children: sdkRoutes
})

app.use(createPinia())
app.use(ElementPlus)
app.use(router)

// 初始化认证状态
const authStore = useAuthStore()
authStore.initAuth()

// 初始化语言设置
initializeLanguage()

// 初始化主题设置
initializeTheme()

// 注册全局属性
app.config.globalProperties.$t = t
app.config.globalProperties.$isMobile = isMobile()

// 添加窗口大小变化监听器
addResizeListener(app, router)

// 添加路由变化时的白屏检测
router.afterEach((to, from) => {
  console.log(`路由变化: ${from.path} -> ${to.path}`)
  // 延迟检测，等待组件渲染完成
  setTimeout(() => {
    whiteScreenDetector.startDetection()
  }, 500)
})

// 添加 Vue 全局错误处理器
app.config.errorHandler = (err, instance, info) => {
  console.error('Vue 全局错误:', err)
  console.error('错误信息:', info)
  console.error('组件实例:', instance)
}

// 添加全局错误处理，抑制浏览器扩展相关的错误
window.addEventListener('error', (e) => {
  if (e.message && e.message.includes('message port closed')) {
    // 抑制 message port 相关错误，这通常是浏览器扩展引起的
    e.preventDefault()
    return false
  }
})

// 添加未处理的 Promise 拒绝处理器
window.addEventListener('unhandledrejection', (e) => {
  if (e.reason && e.reason.message && e.reason.message.includes('message channel closed')) {
    // 抑制 message channel 相关错误
    e.preventDefault()
    return false
  }
  console.error('未处理的 Promise 拒绝:', e.reason)
})

// 抑制 runtime.lastError 相关的控制台警告
const originalWarn = console.warn
console.warn = (...args) => {
  try {
    const message = args.map(arg => {
      if (typeof arg === 'string') return arg
      if (typeof arg === 'object' && arg !== null) {
        return JSON.stringify(arg)
      }
      return String(arg)
    }).join(' ')

    if (!message.includes('runtime.lastError') && !message.includes('message port closed')) {
      originalWarn(...args)
    }
  } catch (error) {
    // 如果处理警告时出错，直接调用原始的 warn
    originalWarn(...args)
  }
}

// 临时添加清理函数到全局，方便测试
if (import.meta.env.DEV) {
  import('./utils/clearTaskData').then(({ clearTaskData }) => {
    (window as any).clearTaskData = clearTaskData
  })
}

// 挂载应用 - 添加错误处理
try {
  const mountedApp = app.mount('#app')
  console.log('应用挂载成功')

  // 保存应用实例到全局，供白屏检测器使用
  window.__VUE_APP__ = app

  // 启动白屏检测
  setTimeout(() => {
    whiteScreenDetector.startDetection()
  }, 1000)

} catch (error) {
  console.error('应用挂载失败:', error)
  // 如果挂载失败，显示错误信息
  document.getElementById('app')!.innerHTML = `
    <div style="padding: 20px; text-align: center; color: red;">
      <h1>应用启动失败</h1>
      <p>请刷新页面重试，或查看控制台获取详细错误信息</p>
      <button onclick="window.location.reload()" style="padding: 10px 20px; margin-top: 10px;">刷新页面</button>
    </div>
  `
}

// 临时禁用 SDK 初始化以避免应用冲突
// TODO: 需要重新设计 SDK 集成方式
console.log('SDK 初始化已暂时禁用，应用将以独立模式运行')

// 如果需要启用 SDK，请取消下面的注释并解决重复挂载问题
/*
setTimeout(() => {
  try {
    createWallet(router, initializeProviders, {
        onLoginSuccess: (account: unknown) => {
            console.log('登录成功', account)
        },
        onCreateSuccess: (account: unknown) => {
            console.log('注册成功', account)
        }
    })
  } catch (error) {
    console.warn('SDK 初始化失败，但应用将继续运行:', error)
  }
}, 1000)
*/
